//
//  WBBaseViewController.swift
//  XtWeiBo
//
//  Created by 徐腾 on 2017/7/18.
//  Copyright © 2017年 徐腾. All rights reserved.
//

import UIKit

class WBBaseViewController: UIViewController {

    lazy var navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))
    
    // 访客视图的标记
    var isVisitorView = false
    
    // 访客视图设置 图像和标识文字的 字典
    var visitorInfoDict: [String: String]?
    
    // tableView
    var tableView: UITableView?
    
    // 上下拉刷新控件
    var refreshControl: UIRefreshControl?
    
    /// 上拉刷新的标记
    var isPullDown = false
    
    // 自定义导航条目  -- 以后设置导航条目都使用 navItem
    lazy var navItem = UINavigationItem()
    
    // 重写title didSet 方法
    override var title: String? {
        didSet {
            navItem.title = title
        }
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
        
        // 加载数据
        loadData()
        
        // 取消自动缩进 因为如果隐藏了导航栏 会自动缩进 20
        automaticallyAdjustsScrollViewInsets = false
    }
    
    func loadData() {
        // 如果子类不实现，默认关闭刷新控件
        refreshControl?.endRefreshing()
    }
    
}

// MARK: - 访客视图的登录和注册按钮的点击事件
extension WBBaseViewController {

    /// 登录
    @objc fileprivate func login() {
        print("开始登录")
    }
    
    /// 注册
    @objc fileprivate func register() {
        print("开始注册")
    }
}


// MARK: - 设置界面
extension WBBaseViewController {
    
    /// 设置表格视图 - 用户登录之后执行
    /// 子类重写这个方法 - 因为子类不需要关心登录之前的逻辑
    fileprivate func setupUI() {
        
        // 设置 NavigationBar
        setupNavigationBar()
        
        // 设置视图
        isVisitorView ? setupTableView() : setupVisitorView()
        
    }
    
    /// 设置访客视图
    private func setupVisitorView() {
        
        let visitorView = WBVisitorView(frame: view.bounds)
        
        view.insertSubview(visitorView, belowSubview: navigationBar)
        
        // 1> 给访客视图信息字典赋值
        visitorView.visitorDict = visitorInfoDict
        
        // 2> 给访客视图 登录 和 注册 按钮添加点击事件
        visitorView.loginButton.addTarget(self, action: #selector(login), for: .touchUpInside)
        visitorView.registerButton.addTarget(self, action: #selector(register), for: .touchUpInside)
        
        // 3> 设置访客视图的导航条
        navItem.leftBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(login))
        navItem.rightBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(register))
    }
    
    func setupTableView() {
        
        tableView = UITableView(frame: view.bounds, style: .plain)
        
        // 将tableView 插入到 navigationBar 下面
        view.insertSubview(tableView!, belowSubview: navigationBar)
        
        // 设置代理和数据源
        tableView?.delegate = self
        tableView?.dataSource = self
        
        // 设置内容缩进
        tableView?.contentInset = UIEdgeInsets(
            top: navigationBar.bounds.height,
            left: 0,
            bottom: tabBarController?.tabBar.bounds.height ?? 49,
            right: 0)
        
        // 添加刷新控件
        // 1> 创建  refreshControl 控件
        refreshControl = UIRefreshControl()
        // 2> 添加到视图上
        tableView?.addSubview(refreshControl!)
        // 3> 添加上下拉刷新的事件
        refreshControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
        
    }
    
    
    private func setupNavigationBar() {
        
        // 自定义navigationBar
        view.addSubview(navigationBar)
        
        // 将item设置给bar
        navigationBar.items = [navItem]
        // 设置bar的渲染颜色，不然导航条会有很亮眼的颜色
        navigationBar.barTintColor = UIColor.cz_color(withHex: 0xf6f6f6)
        // 设置bar的title的颜色
        navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.darkGray]
        // 设置bar的左右字体颜色
        navigationBar.tintColor = UIColor.orange
    }
    
}


// MARK: - UITableViewDelegate,UITableViewDataSource
extension WBBaseViewController: UITableViewDelegate,UITableViewDataSource {
    
    // 父类不做任何实现
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        let row = indexPath.row
        
        let section = indexPath.section
        
        if row < 0 || section < 0 {
            return
        }
        
        let count = tableView.numberOfRows(inSection: section)
        
        if row == (count - 1) && !isPullDown {
            print("上拉刷新")
            isPullDown = true
            
            loadData()
        }
        
    }
    
}



